﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Pos_Projeto.DAL;
using System.Web.UI.DataVisualization.Charting;

namespace Pos_Projeto
{
    public partial class About : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }

        protected void btnPlotar_Click(object sender, EventArgs e)
        {
            //seta tipos de grafico
            ChartBurnDown.Series["Tendencia"].ChartType = SeriesChartType.Line;
            ChartBurnDown.Series["Realizado"].ChartType = SeriesChartType.Spline;

            //seta cor e espessura da linha
            ChartBurnDown.Series["Tendencia"].Color = System.Drawing.Color.LightGray;
            ChartBurnDown.Series["Tendencia"].BorderWidth = 2;
            ChartBurnDown.Series["Tendencia"].BorderDashStyle = ChartDashStyle.Dash;
            ChartBurnDown.Series["Realizado"].Color = System.Drawing.Color.Blue;
            ChartBurnDown.Series["Realizado"].BorderWidth = 4;

            int codIteracao = Convert.ToInt32(ddlIteracao.SelectedValue);
            using (ModelContainer db = new ModelContainer())
            {
                //consulta iteracao selecionada
                var iteracao = db.Iteracoes.Where(t => t.CodigoIteracao.Equals(codIteracao)).FirstOrDefault();
                if (iteracao != null)
                {
                    if (db.Tarefas.Count(t => t.CodigoIteracao.Equals(codIteracao)) > 0)
                    {
                        //retorna total Horas Previstas para iteracao
                        decimal totalHorasPrevistas = db.Tarefas.Where(t => t.CodigoIteracao.Equals(codIteracao)).Sum(t => t.HorasPrevistas);
                        int intervaloIteracao = iteracao.DataTerminoIteracao.Subtract(iteracao.DataInicioIteracao).Days + 1;

                        //popula a linha tendencia
                        decimal totalHoras = totalHorasPrevistas;
                        for (int i = 0; i < intervaloIteracao; i++)
                        {
                            ChartBurnDown.Series["Tendencia"].Points.AddXY(iteracao.DataInicioIteracao.ToShortDateString(), totalHoras);
                            iteracao.DataInicioIteracao = iteracao.DataInicioIteracao.AddDays(1);
                            totalHoras -= 8;
                        }

                        //retorna os apontamentos para a iteração selecionada
                        var result = (from it in db.Iteracoes
                                      join tarefa in db.Tarefas on it.CodigoIteracao equals tarefa.CodigoIteracao
                                      join apont in db.Apontamentos on tarefa.CodigoTarefa equals apont.CodigoTarefa
                                      select new { apont.HorasRealizadas, apont.DataAtividade, apont.CodigoTarefa }).ToList();
                        
                        //popula a linha realizado
                        foreach (var item in result)
                        {
                            totalHorasPrevistas -= item.HorasRealizadas;
                            ChartBurnDown.Series["Realizado"].Points.AddXY(item.DataAtividade.ToShortDateString(), totalHorasPrevistas);
                        }
                    }
                }
            }
        }


    }

}